VisualHMI - 寄存器操作

本章节以DCBUS为例,介绍寄存器的读写API使用。HMI数据类型包括bit、int16/uint16、int32/uint32、int64/uint64、float、double、string,批量写短整型等

1. get_bit/ set_bit

1.1. API说明

  1. get_bit(vtype, addr)

获取位寄存器:如Modbus的线圈、Fx2N的X、Y、S、M寄存器

  • vtype:数据类型
  • addr:变量地址

  • set_bit(vtype, addr,value)

设置位寄存器:如Modbus的线圈、Fx2N的X、Y、S、M寄存器

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

[!note|tip:注意] 在Modbus 协议中,若是LW/RW/4x/3x寄存器,调用set_bit/get_bit,读写的都是bit0位

适用范围:VisualHMI - HMI&M系列

例程下载链接:ViusalHMI - 寄存器读写(点击下载)

其他参考链接:ViusalHMI - 一主多从(点击跳转)

1.2.LUA脚本

点击线圈0x0000位状态指示灯,触发on_update回调,读取线圈0x0000,并设置线圈0x0001。

function on_update(slave,vtype,addr)
    if vtype == VT_0x
    then
        if addr == 0x0000
        then
            set_bit(VT_0x, 0x0001, get_bit(VT_0x, 0x0000))
        end
    end
end

1.3.运行预览

运行虚拟屏,点击线圈0x0000,线圈0x0001实时变化,如下所示:

Video_2024-01-03_151756 00_00_00-00_00_30~1

2. get_uint16/set_uint16

2.1. API说明

  1. get_uint16(vtype, addr)

读取无符号短整形寄存器,返回无符号短整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_bit(vtype, addr,value)

设置无符号短整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 寄存器值

2.2.LUA脚本

点击数值控件0x1000(LW 内存变量),触发on_update回调,读取内存变量0x1000,并设置内存变量0x1001。

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1000
        then
            set_uint16(vtype, addr+1, get_uint16(vtype, addr))
        end
    end
end

2.3.运行预览

运行虚拟屏,点击寄存器0x1000(LW 内存变量)数值,弹出键盘输入100,寄存器0x1001(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_151756 00_00_00-00_00_30~1

3. get_int16/set_int16

3.1. API说明

  1. get_int16(vtype, addr)

读取有符号短整形寄存器,返回有符号短整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_int16(vtype, addr,value)

设置有符号短整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 寄存器值

3.2.LUA脚本

点击数值控件0x1002(LW 内存变量),触发on_update回调,读取内存变量0x1002,并设置内存变量0x1003。

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1002
        then
            set_int16(vtype, addr+1, get_int16(vtype, addr))
        end
    end
end

3.3.运行预览

运行虚拟屏,点击寄存器0x1002(LW 内存变量)数值,弹出键盘输入-100,寄存器0x1003(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_153630

4. get_uint32/set_uint32

4.1. API说明

  1. get_uint32(vtype, addr)

读取无符号整形寄存器,返回无符号整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_uint32(vtype, addr,value)

设置无符号整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 寄存器值

4.2.LUA脚本

点击数值控件0x1004(LW 内存变量),触发on_update回调,读取内存变量0x1004,并设置内存变量0x1006

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1004
        then
            set_uint32(vtype, addr+2, get_uint32(vtype, addr))
        end
    end
end

4.3.运行预览

运行虚拟屏,点击寄存器0x1004(LW 内存变量)数值,弹出键盘输入70000,寄存器0x1006(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_153836~1

5. get_int32/set_int32

5.1. API说明

  1. get_int32(vtype, addr)

读取有符号整形寄存器,返回有符号整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_int32(vtype, addr,value)

设置有符号整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

5.2.LUA脚本

点击数值控件0x1008(LW 内存变量),触发on_update回调,读取内存变量0x1008,并设置内存变量0x100A

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1008
        then
            set_int32(vtype, addr+2, get_int32(vtype, addr))
        end
    end
end

5.3.运行预览

运行虚拟屏,点击寄存器0x1008(LW 内存变量)数值,弹出键盘输入-70000,寄存器0x100A(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_154114

6. set_uint64/get_uint64

6.1. API说明

  1. get_uint64(vtype, addr)

读取无符号长整形寄存器,返回无符号长整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_uint64(vtype, addr,value)

设置无符号长整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

6.2.LUA脚本

点击数值控件0x100C(LW 内存变量),触发on_update回调,读取内存变量0x100C,并设置内存变量0x1010

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1000
        then
            set_uint64(vtype, addr+4, get_uint64(vtype, addr))
        end
    end
end

7. set_int64/get_int64

7.1. API说明

  1. get_int64(vtype, addr)

读取有符号长整形寄存器,返回有符号长整形数据

  • vtype:数据类型

  • addr:变量地址

  • set_int64(vtype, addr,value)

设置有符号长整形寄存器值

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

7.2.LUA脚本

点击数值控件0x1014(LW 内存变量),触发on_update回调,读取内存变量0x1014,并设置内存变量0x1018

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1014
        then
            set_int64(vtype, addr+4, get_int64(vtype, addr))
        end
    end
end

8. get_float/set_float

8.1. API说明

  1. get_float(vtype, addr)

读取单精度浮点数(float)寄存器,返回有符号单精度浮点数

  • vtype:数据类型

  • addr:变量地址

  • set_float(vtype, addr,value)

设置单精度浮点数(float)寄存器

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

8.2.LUA脚本

点击数值控件0x101C(LW 内存变量),触发on_update回调,读取内存变量0x101C,并设置内存变量0x101E

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x101C
        then
            set_float(vtype, addr+2, get_float(vtype, addr))
        end
    end
end

8.3.运行预览

运行虚拟屏,点击寄存器0x101C(LW 内存变量)数值,弹出键盘输入-1.23,寄存器0x1020(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_154513

9. get_double/set_double

9.1. API说明

  1. get_double(vtype, addr)

读取双精度浮点数(double)寄存器,返回双精度数据

  • vtype:数据类型

  • addr:变量地址

  • set_double(vtype, addr,value)

设置双精度浮点数(double)寄存器

  • vtype:数据类型
  • addr:变量地址
  • value: 1或0

9.2.LUA脚本

点击数值控件0x1020(LW 内存变量),触发on_update回调,读取内存变量0x1020,并设置内存变量0x1024

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1020
        then
            set_double(vtype, addr+4, get_double(vtype, addr))
        end
    end
end

9.3.运行预览

运行虚拟屏,点击寄存器0x1020(LW 内存变量)数值,弹出键盘输入-12345.6789,寄存器0x1024(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_154716

10. get_string/set_string

10.1. API说明

  1. get_string(vtype, addr)

读取字符串变量

  • vtype:数据类型
  • addr:变量地址

  • set_string(vtype, addr,value)

设置字符串类型寄存器

  • vtype:数据类型
  • addr:变量地址
  • value:写入的字符串

10.2.LUA脚本

点击数值控件0x101C(LW 内存变量),触发on_update回调,读取内存变量0x101C,并设置内存变量0x1020

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1030
        then
            set_string(vtype, addr+16, get_string(vtype, addr))
        end
    end
end

10.3.运行预览

运行虚拟屏,点击寄存器0x1030(LW 内存变量)数值,弹出键盘输入"大彩abc123“,寄存器0x1040(LW 内存变量)实时变化,如下所示:

Video_2024-01-03_155035

11. set_uint16_ex

11.1. API说明

批量设置短整型寄存器值

set_uint16_ex(vtype, addr, value1,value2, …, value120)

  • vtype:数据类型
  • addr:变量起始地址,最大可以写120个连续寄存器
  • value1:寄存器1的值
  • value2:寄存器2的值
  • ……
  • value120: 寄存器120的值

11.2.LUA脚本

点击数值控件0x1050(LW 内存变量),触发on_update回调,批量设置0x1060~0x1069(LW 内存寄变量)存器的值

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1050 and get_uint16(vtype, addr) % 2 == 0
        then
             set_uint16_ex(vtype, 0x1060,1,2,3,4,5,6,7,8,9,10)
        end
    end
end

11.3.运行预览

运行虚拟屏,点击寄存器0x1050(LW 内存变量)数值,批量设置0x1060~0x1069(LW 内存寄变量)的值依次为1~10,如下所示:

Video_2024-01-03_155218

12. set_array

12.1. API说明

批量设置短整型寄存器值

set_array(vtype, addr, value1,value2, …, value120)

  • vtype:数据类型
  • addr:变量起始地址,最大可以写120个连续寄存器
  • buff:word(字)数组,最大120个字

12.2.LUA脚本

点击数值控件0x1051(LW 内存变量),触发on_update回调,批量设置0x1060~0x1069(LW 内存寄变量)。

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1050 and get_uint16(vtype, addr) % 2 == 0
        then
             local ex_buff = {}
             for i = 1, 10
             do
                 ex_buff[i] = i*10
             end
             set_array(vtype, 0x1060, ex_buff)
        end
    end
end

12.3.运行预览

运行虚拟屏,点击寄存器0x1050(LW 内存变量)数值,批量设置0x1060~0x1069(LW 内存寄变量)值为依次为10,20,...,90,100

Video_2024-01-03_155853

Copyright ©Dacai all right reserved,powered by Gitbook该文件修订时间: 2024-10-08 16:04:04

results matching ""

    No results matching ""